export default {
  /**
   * 判断字符串是否为空或者null或者undefined
   * @param {*} inStr 输入的字符串
   */
  strIsEmptyOrNull (inStr) {
    if (inStr !== '' && inStr !== null && typeof inStr !== 'undefined') {
      return false
    }
    return true
  },
  /**
   * 去掉字符串中的空格
   * @param {*} inStr 输入的字符串
   */
  trimStr (inStr) {
    // inStr = inStr.split(' ').join('')
    inStr = inStr.replace(/\s+/g, '')
    return inStr
  },
  /**
   * 根据正则判断 input输入框输入的字符是否符合规范 ，返回JSON字符串 {"isOK":"true/false"}
   * isOK 是否符合，true为符合 ，false为不符合
   * @param {*} inStr 输入的字符串
   * @param {*} type 判断规则
   */
  stringFilter (inStr, type) {
    let regModules = {
      'specialCharacter': /[`#~$￥@!！*^……<《>》"”%&]/im, // 特殊字符
      'cardNumber': /^([1-9]{1})(\d{14,18})$/, // 银行卡号
      'money': /^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/, // 金额
      'phoneNumberA': /^1[3|4|5|8][0-9]\d{4,8}$/, // 国内手机号码
      'phoneNumberB': /^(852)\d{8}$/, // 香港手机号码
      'length6': /\d{6}/, // 限制位数
      'email': /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/ // 邮箱
    }
    if (type === 'phoneNumber') {
      if (inStr.indexOf('852') === 0) {
        type = 'phoneNumberB'
      } else {
        type = 'phoneNumberA'
      }
    }
    // debugger
    let reg = regModules[type]
    if (type === 'cardNumber') {
      inStr = this.trimStr(inStr)
    }
    if (reg.test(inStr)) {
      if (type === 'specialCharacter') {
        return { 'isOK': false }
      } else {
        return { 'isOK': true }
      }
    } else {
      if (type === 'specialCharacter') {
        return { 'isOK': true }
      } else {
        return { 'isOK': false }
      }
    }
  },
  /**
   * 表单校验
   * @param {*} lObj 需要验证的对象
   */
  formCheck (lObj) {
    let lVal = lObj.val
    let lType = lObj.type
    for (let key in lType) {
      let lTypeName = lType[key].typeName
      let lTypeVal = lType[key].typeVal
      let lmsg = lType[key].msg
      if (lTypeName === 'minLen') {
        if (lVal.length < parseInt(lTypeVal)) {
          return {isOK: false, msg: lmsg}
        }
      } else if (lTypeName === 'maxLen') {
        if (lVal.length >= parseInt(lTypeVal)) {
          return {isOK: false, msg: lmsg}
        }
      } else if (lTypeName === 'placeholder') {
        if (lVal === lTypeVal) {
          return {isOK: false, msg: lmsg}
        }
      } else {
        let lRes = this.stringFilter(lVal, lTypeName)
        if (!lRes.isOK) {
          return {isOK: false, msg: lmsg}
        }
      }
    }
    return {isOK: true, msg: ''}
  },
  /**
   * 点击右上角返回按钮的时候调用，是否调取原生
   */
  goBack ($root, name) {
    // debugger
    let lRouterLength = $root.$store.getters.getRouterHistoryLength
    let lRouter = $root.$router ? $root.$router : window.history
    if (lRouterLength <= 0) {
      // 此时 调 js桥 返回原生
      $root.$bridge.callhandler('backNative', null, (response) => {})
    } else {
      lRouter.isBack = true
      let lRouterArray = $root.$store.getters.getRouterHistory
      let lData = lRouterArray.slice()
      if (!this.strIsEmptyOrNull(name)) {
        let backCount = 0
        for (let ix = (lData.length - 1); ix >= 0; ix--) {
          backCount--
          if (lData[ix].name === name) {
            lRouter.go(backCount)
            return
          }
          $root.$store.commit('routerHistory', {type: 'back', router: lData[ix]})
        }
        $root.$bridge.callhandler('backNative', null, (response) => {})
      } else {
        lRouter.go(-1)
      }
    }
  },
  /**
   * 格式化数字，格式化金额：
   * 参数说明：
   * number：要格式化的数字
   * decimals：保留几位小数
   * decPoint：小数点符号
   * thousandsSep：千分位符号
   */
  number_format (number, decimals, decPoint, thousandsSep) {
    number = (number + '').replace(/[^0-9+-Ee.]/g, '')
    let n = !isFinite(+number) ? 0 : parseFloat(number)
    let prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
    let sep = (typeof thousandsSep === 'undefined') ? ',' : thousandsSep
    let dec = (typeof decPoint === 'undefined') ? '.' : decPoint
    let s = ''
    let toFixedFix = function (n, prec) {
      let k = Math.pow(10, prec)
      return '' + Math.ceil(n * k) / k
    }
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.')
    var re = /(-?\d+)(\d{3})/
    while (re.test(s[0])) {
      s[0] = s[0].replace(re, '$1' + sep + '$2')
    }
    if ((s[1] || '').length < prec) {
      s[1] = s[1] || ''
      s[1] += new Array(prec - s[1].length + 1).join('0')
    }
    return s.join(dec)
  },
  /**
   * 去掉字符串中指定的字符
   * @param {*} inStr 要处理的字符串
   * @param {*} decChar  要过滤的字符,默认为空格
   */
  replaceChar (inStr, decChar) {
    inStr = inStr.toString()
    let rep = (typeof decChar === 'undefined') ? ' ' : decChar
    inStr = inStr.split(rep).join('')
    return inStr
  },
  /**
   * 时间 +- 天数
   * @param {*} inStr 初始时间
   * @param {*} dayCount  +- 的天数， 要求整数， 减去为负整数， 加为 正整数
   */
  timeHandle (inStr, dayCount) {
    dayCount = (typeof dayCount === 'undefined') ? 0 : dayCount
    let lDate = new Date(inStr)
    lDate = lDate.getTime()
    lDate += dayCount * (24 * 60 * 60 * 1000)
    lDate = new Date(lDate)
    return this.timeFormat('yyyy-MM-dd', lDate)
  },
  /**
   * 获取某年某月的天数
   * @param {*} year 年份
   * @param {*} Month 天数
   */
  getMonthDay (year, Month) {
    let lDate = new Date(parseInt(year), parseInt(Month))
    return lDate.getDate()
  },
  /**
   * 计算几个月之前 - for - 一个月, 三个月，六个月
   * @param {*} inStr 初始时间
   * @param {*} monthCount 月数
   */
  setFastTime (inStr, monthCount) {
    // let lDate = new Date(inStr)
    // let dayCount = 0
    // let lYear = lDate.getFullYear()
    // let lMonth = lDate.getMonth() + 1
    // for (let i = 0; i < monthCount; i++) {
    //   let lsM = lMonth
    //   let lsY = lYear
    //   if ((lMonth - i - 1) <= 0) { // 时间要到去年
    //     lsY--
    //     lsM = 12 - i
    //   }
    //   let ls = new Date(lsY, lsM, 0)
    //   dayCount += ls.getDate()
    // }
    // console.log(dayCount)
    // return this.timeHandle(inStr, -dayCount)
    // 注销部分为按照天数减  以下为按照月数之间减
    let lDate = new Date(inStr)
    let lYear = lDate.getFullYear()
    let lMonth = lDate.getMonth() + 1
    let lDay = lDate.getDate()
    let lM = 0
    if (lMonth - monthCount < 0) {
      lM = 12 + lMonth - monthCount
      lYear--
    } else {
      lM = lMonth - monthCount
    }
    // 单数lM lD前面+0
    if (parseInt(lDay) < 10) {
      lDay = '0' + lDay
    }
    if (lM < 10) {
      lM = '0' + lM
    }
    // debugger
    lDate = new Date(lYear, lM, 0)
    if (lDate.getDate() < lDay) {
      // 判断一下 31号 这种极限情况
      return this.timeFormat('yyyy-MM-dd', lDate)
    } else {
      return `${lYear}-${lM}-${lDay}`
    }
  },
  /**
   * 时间格式化
   * @param {*} fmt 需要输出的格式 yyyy-MM-dd hh:mm:ss
   * @param {*} inDate 输入的时间 new Date()
   */
  timeFormat (fmt, inDate) {
    let o = {
      'M+': inDate.getMonth() + 1, // 月份
      'd+': inDate.getDate(), // 日
      'h+': inDate.getHours(), // 小时
      'm+': inDate.getMinutes(), // 分
      's+': inDate.getSeconds(), // 秒
      'q+': Math.floor((inDate.getMonth() + 3) / 3), // 季度
      'S': inDate.getMilliseconds() // 毫秒
    }
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (inDate.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    for (var k in o) {
      if (new RegExp('(' + k + ')').test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
      }
    }
    return fmt
  },
  /**
   * 获取用户信息
   * @param {*}  作用域
   */
  getUserInfo ($root) {
    return new Promise((resolve, reject) => {
      let userClientNO = $root.$store.getters.getClientNo
      if (this.strIsEmptyOrNull(userClientNO)) {
        $root.$bridge.callhandler('getUserInfo', null, (response) => {
          response = JSON.parse(response)
          console.log(response)
          if (response.userInfo.head.respCode === '000000') { // 返回000000为正常，否则输出错误
            $root.$store.commit('saveUserInfo', {clientNo: response.userInfo.body.clientNo, phone: response.userInfo.body.phone})
            resolve({isok: true})
          } else { // 调用原生提示，输出错误内容
            $root.$bridge.callhandler('showErrorHUD', {
              'type': 'toast',
              'errorMess': response.userInfo.head.respMsg
            })
          }
        })
      } else {
        resolve({isok: true})
      }
    })
  }
}
